const Controller = require("egg").Controller;
const fs = require("fs");
const path = require("path");
const pump = require("mz-modules/pump");
// const { validateImage } = require("../utils/fileValidator");

class UploadController extends Controller {
  async image() {
    const { ctx } = this;

    // 获取上传的文件
    const file = ctx.request.files[0];

    // 验证文件是否存在
    if (!file) {
      ctx.status = 400;
      ctx.body = { code: 400, error: "请选择上传文件" };
      return;
    }

    try {
      // 执行文件验证
      // await validateImage(file);

      // 上传到OSS
      const result = await ctx.service.oss.upload(file);

      ctx.body = {
        code: 0,
        success: true,
        message: "上传成功",
        data: {
          url: result.url,
          name: result.name,
        },
      };
    } catch (err) {
      // 清理临时文件
      await ctx.cleanupRequestFiles();

      ctx.status = 400;
      ctx.body = {
        code: 400,
        success: false,
        error: err.message,
      };
    }
  }
  async editorImage() {
    const { ctx } = this;

    // 获取上传的文件
    const file = ctx.request.files[0];

    try {
      // 执行文件验证
      // await validateImage(file);

      // 上传到OSS
      const result = await ctx.service.oss.upload(file);

      ctx.body = {
        errno: 0,
        success: true,
        message: "上传成功",
        data: {
          url: result.url,
          name: result.name,
        },
      };
    } catch (err) {
      // 清理临时文件
      await ctx.cleanupRequestFiles();

      ctx.status = 400;
      ctx.body = {
        errno: 1,
        success: false,
        error: err.message,
      };
    }
  }
  // async image() {
  //   const { ctx } = this;

  //   // 验证文件存在
  //   if (!ctx.request.files || ctx.request.files.length === 0) {
  //     ctx.status = 400;
  //     ctx.body = { error: "请选择上传文件" };
  //     return;
  //   }

  //   const file = ctx.request.files[0];

  //   try {
  //     // 验证文件类型
  //     const allowedMimeTypes = [
  //       "image/jpeg",
  //       "image/png",
  //       "image/gif",
  //       "image/webp",
  //     ];
  //     if (!allowedMimeTypes.includes(file.mime)) {
  //       ctx.throw(400, "不支持的文件类型");
  //     }

  //     // 生成安全文件名
  //     const ext = path.extname(file.filename);
  //     const newFilename = `${Date.now()}${Math.random()
  //       .toString(36)
  //       .substr(2, 6)}${ext}`;

  //     // 创建上传目录
  //     const uploadDir = path.join(this.config.baseDir, "app/public/uploads");
  //     if (!fs.existsSync(uploadDir)) {
  //       fs.mkdirSync(uploadDir, { recursive: true });
  //     }

  //     // 处理文件上传
  //     const targetPath = path.join(uploadDir, newFilename);
  //     const reader = fs.createReadStream(file.filepath);
  //     const writer = fs.createWriteStream(targetPath);
  //     await pump(reader, writer);

  //     // 返回结果
  //     ctx.body = {
  //       code: 200,
  //       message: "上传成功",
  //       data: {
  //         url: `/public/uploads/${newFilename}`, // 访问路径
  //         name: newFilename,
  //         size: file.size,
  //         mime: file.mime,
  //       },
  //     };
  //   } catch (err) {
  //     ctx.logger.error("上传失败:", err);
  //     ctx.status = 500;
  //     ctx.body = { error: "服务器处理文件时出错" };
  //   } finally {
  //     // 清理临时文件
  //     await ctx.cleanupRequestFiles();
  //   }
  // }

  async delete() {
    const { ctx } = this;

    // 确保获取到文件名参数
    const { filename } = ctx.params;
    // 验证参数是否存在
    if (!filename || typeof filename !== "string") {
      ctx.status = 400;
      ctx.body = { error: "缺少文件名参数" };
      return;
    }

    try {
      // 安全过滤文件名（防止路径遍历攻击）
      const safeFilename = path.basename(filename);
      // 构建完整文件路径
      const uploadDir = path.join(this.config.baseDir, "app/public/uploads");
      const filePath = path.join(uploadDir, safeFilename);

      // 调试日志（生产环境可移除）
      ctx.logger.info(`尝试删除文件: ${filePath}`);

      // 检查文件是否存在
      if (fs.existsSync(filePath)) {
        // 删除文件
        fs.unlinkSync(filePath);

        ctx.body = {
          code: 0,
          message: "删除成功",
          data: { filename: safeFilename },
        };
      } else {
        ctx.status = 404;
        ctx.body = { error: "文件不存在" };
      }
    } catch (err) {
      ctx.logger.error("删除失败:", err);
      ctx.status = 500;
      ctx.body = {
        error: "删除文件时出错",
        details: err.message,
      };
    }
  }
}

module.exports = UploadController;
